#[cfg(test)]
mod tests {
    use super::*;
    use sheisright::web::App;   // 注意路径
    use sheisright::rbac;
    use axum::body::Body;
    use http::{Request, StatusCode};
    use tower::ServiceExt; // oneshot
    use http::header::CONTENT_TYPE;
    #[tokio::test]
    async fn anonymous_gets_redirect() {
        // 用你的 App::new() 生成 Router
        let app = App::new().await.unwrap().build_router().await;  // 假设 App 有 into_router()


        let resp = app
            .oneshot(Request::builder().uri("/admin").body(Body::empty()).unwrap())
            .await
            .unwrap();

        // 未登录 → 302/307 到 /login
        assert!(resp.status().is_redirection());
    }
    #[tokio::test]
    async fn with_session_can_access() {
        rbac::create_enforcer().await;
        let app = App::new().await.unwrap().build_router().await;  // 假设 App 有 into_router()

        // 1. 登录（表单）
        let login = Request::builder()
            .method("POST")
            .uri("/login")
            .header(CONTENT_TYPE, "application/x-www-form-urlencoded")
            .body(Body::from("username=configer&password=hunter42"))
            .unwrap();
        let resp = app.clone().oneshot(login).await.unwrap();
        assert_eq!(resp.status(), 303);                    // ← 先允许 303

        // 2. 取出 Set-Cookie
        let cookie = resp.headers().get("set-cookie").unwrap().to_str().unwrap();

        // 3. 带 Cookie 访问受保护页面
        let admin = Request::builder()
            .method("GET")
            .uri("/admin-settings")              // 换成你实际受保护的路由
            .header("cookie", cookie)
            .body(Body::empty())
            .unwrap();
        let resp = app.oneshot(admin).await.unwrap();
        assert_eq!(resp.status(), 200);                    // ← 现在应该是 200
    }
}
